package LeetcodeTest_three;

public class number_reverse
{
    public static void main(String[] args)
    {
        int result=Solution.reverse(2147483642);//2147483647      1463847418
        /*int 型最大为2147483647 ，现在314748364*10>2147483647
        System.out.println(314748364*10);*/
        System.out.println(result);
    }
}
class Solution
{
    public static int reverse(int x)
    {
        int answer=0;
        while(x!=0)
        {
            int m=x/10;
            int n=x%10;
            if(answer>Integer.MAX_VALUE/10||(answer==Integer.MAX_VALUE/10 && n>7))
                return 0;
            else if(answer<Integer.MIN_VALUE/10||(answer==Integer.MIN_VALUE/10 && n<-8))
                return 0;
            else
                answer=answer*10+n;
            x=m;
        }
        return answer;
    }
}

/*
1、将反转后的数值sum定义成long型，数字反转之后即使溢出，但long型是可以存储的，然后将这个数值与int型数值的范围进行比较
   （-2^31,2^31-1）
2、sum=sum*10+余数；在计算sum时，对上次循环求得的sum先检验，在相加之前就判断是否溢出，如果相溢出就返回0，否则就相加
3、判断sum*10/10!=sum；由于数据溢出后，当前变量存储的值不可能等于sum
*/
